﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;
using Sigecov.Models;
namespace Sigecov.Formularios
{
    public partial class FrmTransportadora : Sigecov.Formularios.FrmBase
    {
        public FrmTransportadora()
        {
            InitializeComponent();
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "INCLUIR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Transportadora transportadora = new Transportadora();
                        if (!
                            ((string.IsNullOrWhiteSpace(txtBairro.Text))
                            || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                            || (string.IsNullOrWhiteSpace(txtNome.Text))
                            || (string.IsNullOrWhiteSpace(txtNumero.Text))
                            || (string.IsNullOrWhiteSpace(txtPrecoKg.Text))
                            || (string.IsNullOrWhiteSpace(txtCep.Text)))
                           )
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                var transportadoras = DB.Transportadoras.Where(t => t.traNome == txtNome.Text);
                                if (transportadoras.Count() == 0)
                                {
                                    transportadora.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                    transportadora.traBairro = txtBairro.Text;
                                    transportadora.traCep = txtCep.Text;
                                    transportadora.traComplemento = txtComplemento.Text;
                                    transportadora.traEmail = txtEmail.Text;
                                    transportadora.traFax = mtbFax.Text;
                                    transportadora.traLogradouro = txtLogradouro.Text;
                                    transportadora.traNome = txtNome.Text;
                                    transportadora.traNumero = Convert.ToInt32(txtNumero.Text);
                                    transportadora.traPrecoKg = Convert.ToSingle(txtPrecoKg.Text);
                                    transportadora.traTelefone = mtbTelefone.Text;
                                    transportadora.traTipoLogradouro = cbxTipoLogradouro.Text;

                                    transportadora.Cadastrar(transportadora, DB);

                                    MessageBox.Show("Transportadora cadastrar com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    txtNome.Focus();
                                }
                                else
                                {
                                    MessageBox.Show("Essa transportadora já está cadastrada!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    txtNome.Clear();
                                    txtNome.Focus();
                                }
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                cbxEstado.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtNome.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao inserir a transportadora!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtNome.Focus();
                    }
                }
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Transportadora transportadora = new Transportadora();
                        if (!
                            ((string.IsNullOrWhiteSpace(txtBairro.Text))
                            || (string.IsNullOrWhiteSpace(txtEmail.Text))
                            || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                            || (string.IsNullOrWhiteSpace(txtNome.Text))
                            || (string.IsNullOrWhiteSpace(txtNumero.Text))
                            || (string.IsNullOrWhiteSpace(txtPrecoKg.Text))
                            || (string.IsNullOrWhiteSpace(txtCep.Text)))
                           )
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                transportadora = DB.Transportadoras.Find(_idAcao);
                                transportadora.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                transportadora.traBairro = txtBairro.Text;
                                transportadora.traCep = txtCep.Text;
                                transportadora.traComplemento = txtComplemento.Text;
                                transportadora.traEmail = txtEmail.Text;
                                transportadora.traFax = mtbFax.Text;
                                transportadora.traLogradouro = txtLogradouro.Text;
                                transportadora.traNome = txtNome.Text;
                                transportadora.traNumero = Convert.ToInt32(txtNumero.Text);
                                transportadora.traPrecoKg = Convert.ToSingle(txtPrecoKg.Text);
                                transportadora.traTelefone = mtbTelefone.Text;
                                transportadora.traTipoLogradouro = cbxTipoLogradouro.Text;

                                transportadora.Alterar(transportadora, DB);

                                MessageBox.Show("Transportadora alterada com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                cbxEstado.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtNome.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao alterar a transportadora!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnSalvar.Focus();
                    }
                }

            }
        }

        private void FrmTransportadora_Load(object sender, EventArgs e)
        {
            this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
            this.AcaoIncluir();
            if (_tipoOperacao == "INCLUIR")
            {
                this.lblTituloAcao.Text = "Cadastrar Transportadora";
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                Ferramenta.ResetarControles(this.Controls);
                this.AcaoIncluir();
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.lblTituloAcao.Text = "Alterar Transportadora";
                this.AcaoAlterar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Transportadora transportadora = DB.Transportadoras.Find(_idAcao);
                    txtBairro.Text = transportadora.traBairro;
                    txtComplemento.Text = transportadora.traComplemento;
                    txtEmail.Text = transportadora.traEmail;
                    txtLogradouro.Text = transportadora.traLogradouro;
                    txtNome.Text = transportadora.traNome;
                    txtNumero.Text = transportadora.traNumero.ToString();
                    txtPrecoKg.Text = transportadora.traPrecoKg.ToString();
                    txtCep.Text = transportadora.traCep;
                    mtbFax.Text = transportadora.traFax;
                    mtbTelefone.Text = transportadora.traTelefone;

                    cbxPais.SelectedValue = transportadora.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = transportadora.Cidade.Estado.estId;
                    cbxCidade.SelectedValue = transportadora.Cidade.cidId;

                    cbxTipoLogradouro.SelectedItem = transportadora.traTipoLogradouro;
                }
            }
            else if (_tipoOperacao == "DELETAR")
            {
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.lblTituloAcao.Text = "Deletar Transportadora";
                this.AcaoDeletar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Transportadora transportadora = DB.Transportadoras.Find(_idAcao);
                    txtBairro.Text = transportadora.traBairro;
                    txtComplemento.Text = transportadora.traComplemento;
                    txtEmail.Text = transportadora.traEmail;
                    txtLogradouro.Text = transportadora.traLogradouro;
                    txtNome.Text = transportadora.traNome;
                    txtNumero.Text = transportadora.traNumero.ToString();
                    txtPrecoKg.Text = transportadora.traPrecoKg.ToString();
                    txtCep.Text = transportadora.traCep;
                    mtbFax.Text = transportadora.traFax;
                    mtbTelefone.Text = transportadora.traTelefone;

                    cbxPais.SelectedValue = transportadora.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = transportadora.Cidade.Estado.estId;
                    cbxCidade.SelectedValue = transportadora.Cidade.cidId;

                    cbxTipoLogradouro.SelectedItem = transportadora.traTipoLogradouro;
                    Ferramenta.DesativarControles(this.Controls);
                }
            }
        }

        private void cbxPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            cbxEstado.DataSource = Estado.ListarEstado(Convert.ToInt32(cbxPais.SelectedValue));
            cbxEstado.DisplayMember = "estNome";
            cbxEstado.ValueMember = "estId";
        }

        private void cbxEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            cbxCidade.DataSource = Cidade.ListarCidade(Convert.ToInt32(cbxEstado.SelectedValue));
            cbxCidade.DisplayMember = "cidNome";
            cbxCidade.ValueMember = "cidId";
        }

        private void btnDeletar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "DELETAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        DialogResult confirmar = MessageBox.Show("Deseja deletar a transportadora "+txtNome.Text.ToUpper()+"?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (confirmar.ToString().ToUpper() == "YES")
                        {
                            Transportadora transportadora = new Transportadora();
                            transportadora = DB.Transportadoras.Find(_idAcao);
                            transportadora.Deletar(transportadora, DB);
                            MessageBox.Show("Transportadora deletada com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao deletar a transportadora!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnDeletar.Focus();
                    }
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Ferramenta.ResetarControles(this.Controls);
        }

        private void txtPrecoKg_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.ValorMonetario(e);
        }

        private void txtCep_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (cbxPais.Text == "Brasil")
            {
                txtCep.MaxLength = 8;
                Ferramenta.SomenteNumero(e);
            }
            else
                txtCep.MaxLength = 10;
        }

        private void txtNumero_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void btnPesquisarCep_Click(object sender, EventArgs e)
        {
            bool existeConexao = Ferramenta.VerificarConexaoInternet();
            bool enderecoEncontrado = false;
            bool problemaConexao    = false;
            string mensagemConexao = "";
            if (existeConexao)
            {
                if (cbxPais.Text == "Brasil")
                {
                    Dictionary<string, string> endereco = Ferramenta.BuscarCep(txtCep.Text);

                    foreach (var item in endereco)
                    {
                        if (item.Key == "conexao")
                        {
                            mensagemConexao = item.Value;
                            problemaConexao = true;

                        }
                        if (item.Key == "logradouro")
                        {
                            if (item.Value == "")
                                enderecoEncontrado = false;
                            else
                                enderecoEncontrado = true;
                        }
                    }
                    if (!(problemaConexao))
                    {
                        if (enderecoEncontrado)
                        {
                            foreach (var item in endereco)
                            {
                                if (item.Key == "tipoLogradouro")
                                    cbxTipoLogradouro.SelectedItem = item.Value;
                                else if (item.Key == "logradouro")
                                    txtLogradouro.Text = item.Value;
                                else if (item.Key == "bairro")
                                    txtBairro.Text = item.Value;
                                else if (item.Key == "cidade")
                                {
                                    cbxCidade.Items.Add(item.Value);
                                    cbxCidade.SelectedItem = item.Value;
                                }
                                else
                                {
                                    cbxEstado.Text = item.Value;
                                    cbxEstado.SelectedItem = item.Value;
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("Endereço não encontrado com o cep informado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtCep.Focus();
                        }
                    }
                    else
                    {
                        MessageBox.Show(mensagemConexao, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtCep.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("A busca de cep só funciona para os estados brasileiros!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtCep.Focus();
                }
            }
            else
            {
                MessageBox.Show("Sem conexão com internet!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCep.Focus();
            }
        }
    }
}
